nulo    [ \t\n]
blanco  {nulo}+
digito  [0-9]
letra   [A-Za-z]
resto   ({letra}|{digito}){0,7}
ident   ({letra}|{digito}){resto}
idlargo ({letra}|{digito})+
neg	"-"
identn	{neg}({ident}|{idlargo})
id	({ident}|{idlargo}|{identn})

Punto	.
Numero	[1-9]
Entero 	[0]|{(numero)+}
Real  	{Entero}{Decimal}
Decimal {punto}{digito}+
TReal	"Real"
TEnt	"Ent"
TVar	"var"
TFVar	"Fvar"
lintvar	{TVar}({nulo}+)
linfvar {TFVar}({nulo}+)
pc	";"
declara ({TEnt}|{TReal})({blanco}+)({letra}+)({pc})
decTodo ({lintvar})(({declara}{blanco})+)({linfvar})

TokenInicio	"Inicio"
TokenFinal	"Fin"
lineaInicio	{TokenInicio}({nulo}+)
lineaFinal	{TokenFinal}({nulo}+)
sum	"+"
res	"-"
mul	"*"
div	"/"
mod	"%"
abs	"abs"
sqr	"sqr"
as	":="
pA	"("
pC	")"
sentencia	{id}({sum}|{res}|{mul}|{div}|{mod}){id}
sentenciaUnaria	({sqr}|{abs}){pA}{id}{pC}
sentenciaGeneral	({sentencia}|{sentenciaUnaria})
sentenciaAnidada	({pA}{sentenciaGeneral}{pC})({sum}|{res}|{mul}|{div}|{mod})({id})
asignacion	{id}{as}{sentenciaGeneral}
asignacionCerrada	{asignacion}{pc}
asignacionAnidada	{id}{as}{sentenciaAnidada}{pc}
asignacionSimple	{id}{as}{id}{pc}
asignacionGenerica	({asignacionCerrada}|{asignacionSimple}|{asignacionAnidada})

%%
{lintvar}	{printf("Comienzo de las Delaraciones\n");}
{declara}	{printf("Declaracion");}
{linfvar}	{printf("Fin de las Declaraciones\n\n");}

{lineaInicio}	{printf("Comienzo de las Asignaciones\n");}
{asignacionGenerica}		{printf("Asignacion General");}
{lineaFinal}	{printf("Final de las Asignaciones\n");}
.		{printf("#");}

